The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices, and computer systems may be found in many different settings. Computer systems typically include a combination of hardware (such as semiconductors, integrated circuits, programmable logic devices, programmable gate arrays, and circuit boards) and software, also known as computer programs.
Years ago, computers were isolated devices that did not communicate with each other. But, today computers are often connected in networks, such as the Internet or World Wide Web, and a user at one computer, often called a client, may wish to access information at or send requests for services to multiple other computers, often called servers, via a network. Companies often use multiple servers to respond to requests from clients and replicate their data across the multiple servers, in order to provide enhanced performance, reliability, and the ability to respond to a variable rate of requests from clients. The multiple servers often contain programs called application servers, which execute applications and provide services for security, data access, and persistence. The client is typically unaware of the existence of the multiple servers, and instead sends its request to a single server, which selects one of the application servers to process the request and routes the request to the selected application server.
Several different types of algorithms are currently used to select which server, and thus which application server, receives which request. In a first example, a load-balancing algorithm distributes incoming requests to multiple servers, so that each server has roughly the same workload. But, some requests are related to each other (e.g., are part of the same transaction) and need to be processed by the same application server. Thus, in a second example, a temporary affinity algorithm, e.g. based on HTTP (Hypertext Transport Protocol) cookies or URL (Uniform Resource Locator) re-writing, routes all requests that are associated with a single transaction to the server where the transaction started. Further, in a third example, a cached session-state algorithm routes requests from clients to the server where that client's state (e.g., a hypertext transport protocol session state) is currently cached.
Unfortunately, the three example load-balancing algorithms mentioned above do not have knowledge of the application server logic, so transactions that have multiple associated long-running requests can quickly cause the system to become unbalanced due to a non-optimal load-balancing of the session-creating requests. This may result in one or more servers becoming overloaded and experiencing degraded performance, while other servers may be underutilized.
Without a better way to distribute requests across multiple servers, users will continue to suffer from degraded performance.